/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package coop.demanda.habitacional;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

/**
 *
 * @author mmanto
 */
@Stateless
public class DemandaHabitacionalFacade extends AbstractFacade<DemandaHabitacional> {
    @PersistenceContext(unitName = "coop_demanda-habitacional_war_1.0-SNAPSHOTPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public DemandaHabitacionalFacade() {
        super(DemandaHabitacional.class);
    }
    
    public List<DemandaHabitacional> findAllByUsuarioId(Login login) {
        CriteriaBuilder cBuilder =  getEntityManager().getCriteriaBuilder();
        CriteriaQuery cQuery = getEntityManager().getCriteriaBuilder().createQuery();
        Root<DemandaHabitacional> c = cQuery.from(DemandaHabitacional.class);
        cQuery.select(c);
        cQuery.where(cBuilder.equal(c.get("usuario"), login));
        
        return getEntityManager().createQuery(cQuery).getResultList();
    }
    
    
    /**
     * Retorna todas las demandas habitacionales del municipio determinado por el usuario logueado.
     * @param login Login
     * @return Listado de DemandaHabitacional
     */
    public List<DemandaHabitacional> findAllByMunicipio(Login login){
        CriteriaBuilder cBuilder =  getEntityManager().getCriteriaBuilder();
        CriteriaQuery cQuery = getEntityManager().getCriteriaBuilder().createQuery();
        Root<DemandaHabitacional> c = cQuery.from(Municipio.class);
        cQuery.select(c);
        
        // Consultar a que municipio pertenece el usuario logueado
        cQuery.where(cBuilder.equal(c.get("id"), login.getMunicipio().getId()));
        
        Municipio municipio = (Municipio)getEntityManager().createQuery(cQuery).getResultList().get(0);
        
        CriteriaQuery cQueryDH = getEntityManager().getCriteriaBuilder().createQuery();
        Root<DemandaHabitacional> cdh = cQueryDH.from(DemandaHabitacional.class);
        
        cQueryDH.select(cdh);
        cQueryDH.where(cBuilder.equal(cdh.get("municipio"), municipio));
        
        return getEntityManager().createQuery(cQueryDH).getResultList();
    }
}
